package QueueAndStack;

/**
 * 字符串解码
 * 给定一个经过编码的字符串，返回它解码后的字符串。
 * <p>
 * 编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
 * <p>
 * 你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。
 * <p>
 * 此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像 3a 或 2[4] 的输入。
 */
public class DecodeString {
    int i;
    public String decodeString(String s) {
        i=0;
        return dec(s);
    }

    private String dec(String s) {
        StringBuilder res = new StringBuilder();
        while (i < s.length() && s.charAt(i) != ']') {
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                int cnt = 0;
                while (i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                    cnt = cnt * 10 + s.charAt(i) - '0';
                    i++;
                }
                i++;
                String t = dec(s);
                i++;
                while (cnt-- > 0) {
                    res.append(t);
                }
            } else {
                res.append(s, i, i + 1);
                i++;
            }
        }
        return res.toString();
    }
}